#ifndef GAME_H
#define GAME_H

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include "state.h"

/**
 * Structure qui va decrire l'ensemble de l'application
 * Les etats sont declares ici, ainsi que toutes les variables
 * qui seraient globales
 * On va ainsi limiter les variables globales
 * Les etats ici declares contiendront leurs propres environnements etc...
 */
typedef struct Game{
	int test;
	
	State * current_state;
	State menu_state;
	State see_state;
	
	GLuint texture;
	
} Game;

/**
 * Fonction permettant de recuperer la structure decrivant tout le programme 
 * @return pointeur vers la structure decrivant le programme
 */
Game * game();

/**
 * Renvoie un pointeur vers l'etat courant
 * @return pointeur vers l'etat courant
 */
State * game_state();

/**
 * Fonction d'initialisation des elements du jeu
 */
GLvoid game_init();

/**
 * Fonction de gestion de l'affichage de tout le programme
 * L'affichage change suivant l'etat dans lequel on se trouve
 */
GLvoid game_display();

/**
 * Fonction de gestion du redimensionnement de la fenetre
 * @param width Nouvelle largeur de la fenetre
 * @param height Nouvelle hauteur de la fenetre
 */
GLvoid game_resize(GLsizei width, GLsizei height);

/**
 * Fonction permettant la gestion des touches du clavier
 */
GLvoid game_event_keyboard(unsigned char key, int x, int y);
GLvoid game_event_special(int key, int x, int y);

/**
 * Liberation des ressources allouees
 */
GLvoid game_exit();

#endif